"""
类方法和静态方法详解：
    概述：
        类方法：
            1：第一个参数必须是当前类的对象，一般用cls当做参数名（即：class）
            2：类方法必须通过@classmethod来修饰
            3：类方法是属于类的方法，能够被该类下所有的对象所共享。
            4：可以通过类名.或者对象名.的方式调用，推荐：前者。

        静态方法：
            1：静态方法没有参数的硬性指标，可以一个参数都不喜欢传
            2：静态方法必须要通过@staticmethod来修饰
            3：类方法是属于类的方法，能够被该类下所有的对象所共享。
            4：可以通过类名.或者对象名.的方式调用，推荐：前者。

    类方法和静态方法的区别：
        类方法需要传参，静态方法不需要传递参数。
"""
# 需求： 定义学生类，有类属性：teacher_name，对象属性：name，类方法
class Student(object):
    teacher_name = "张三"

    def __init__(self):
        self.name = "老张"

    # 定义类方法，访问：teacher_name这个类变量。
    @classmethod
    def method1(cls):   # cls是class的意思，
        print(cls.teacher_name) # 类名.类属性名的方式访问类变量

    # 定义静态方法，访问：teacher_name这个类变量。
    @staticmethod
    def method2():
        print(Student.teacher_name)


if __name__ == '__main__':
    # 2：创建对象
    s1 = Student()
    Student.method1() # 建议这种
    s1.method1()
    print("-------------------------------")
    Student.method2()
    s1.method2()


